import { ref } from 'vue'

// 封装上传图片的函数
export const useUploadImage = (uploadUrl: string, count: number) => {
  const isUploading = ref(false) // 标记是否正在上传
  const uploadedImages = ref<string[]>([]) // 存储已上传的图片地址

  // 选择并上传图片的函数
  const chooseAndUploadImage = async () => {
    try {
      // 开始上传，标记为正在上传
      isUploading.value = true
      // 调用 uni.chooseImage 选择图片
      const { tempFilePaths } = await uni.chooseImage({
        count, // 一次只选多张图片
        sizeType: ['original', 'compressed'], // 可以选择原图或压缩图
        sourceType: ['album', 'camera'], // 可以从相册选图或拍照
      })

      // 遍历选择的图片路径
      for (const filePath of tempFilePaths) {
        // 调用 uni.uploadFile 上传图片
        const { data } = await uni.uploadFile({
          url: uploadUrl, // 上传图片的服务器地址
          filePath,
          name: 'file', // 上传文件的字段名
        })

        // 假设服务器返回的是 JSON 格式的图片地址
        const response = JSON.parse(data)
        if (response.success) {
          // 如果上传成功，将图片地址添加到已上传列表
          uploadedImages.value.push(response.imageUrl)
        } else {
          // 上传失败，抛出错误
          throw new Error('图片上传失败')
        }
      }
    } catch (error) {
      // 处理错误
      console.error('选择或上传图片时出错:', error)
    } finally {
      // 上传结束，标记为已完成上传
      isUploading.value = false
    }
  }

  // 返回封装好的函数和状态
  return {
    isUploading,
    uploadedImages,
    chooseAndUploadImage,
  }
}
